SCREEN 1,320,200,4,1:DEFINT A-Z:DIM CELL(89,89) WINDOW 2,"Amiga Snowflakes",,20,1 MENU 1,0,1,"CONTROLS" MENU 1,4,1,"INITIALIZE":MENU 1,5,1,"CHANGE SIZE" MENU 1,6,1,"LOAD":MENU 1,7,1,"SAVE":MENU 1,8,1,"QUIT" ON MENU GOSUB MENUINT MENU ON SIZE=64 NEWSIZE: SIZE1=SIZE+1 INITIALIZE: CLS:MENU 1,1,1,"START":MENU 1,2,1,"":MENU 1,3,1,"STEP" LOCATE 1,26:PRINT"SIZE:":LOCATE 2,26:PRINT SIZE:LOCATE 4,26 PRINT"GENERATION:":LOCATE 7,26:PRINT"POPULATION:" H=SIZE/2:GENERATION=0 FOR X=1 TO H FOR Y=X TO 1 STEP-1 CELL(X,Y)=0 CELL(X,X)=7 NEXT NEXT RUNMODE=0 MAINLOOP: LINE (0,0)-(SIZE+2,SIZE+2),2,BF LOCATE 5,26:PRINT GENERATION;" "; POPULATION=-128 FOR X=1 TO H FOR Y=X TO 1 STEP-1 STORE=0:C=CELL(X,Y) IF X <> Y AND (C < 5 OR C > 7) GOTO STORECELL STORE=1:COLOR RND*12+3:POPULATION=POPULATION+8 PSET(X,Y):PSET(SIZE1-X,Y):PSET(X,SIZE1-Y):PSET(SIZE1-X,SIZE1-Y) PSET(Y,X):PSET(SIZE1-Y,X):PSET(Y,SIZE1-X):PSET(SIZE1-Y,SIZE1-X) STORECELL: CELL(X,Y)=STORE NEXT Y NEXT X COLOR 1:LOCATE 8,26:PRINT POPULATION;" "; CHECKMENU: COLOR 1:IF MENUHIT = 1 GOTO EXECUTE IF RUNMODE=0 GOTO CHECKMENU GENERATE: COLOR 1:GENERATION=GENERATION+1 FOR X=1 TO H FOR Y=X TO 1 STEP-1 IF (CELL(X,Y) AND 1) = 0 GOTO DEADCELL CELL(X-1,Y-1)=CELL(X-1,Y-1)+2:CELL(X,Y-1)=CELL(X,Y-1)+2 CELL(X+1,Y-1)=CELL(X+1,Y-1)+2:CELL(X-1,Y)=CELL(X-1,Y)+2 CELL(X+1,Y)=CELL(X+1,Y)+2:CELL(X-1,Y+1)=CELL(X-1,Y+1)+2 CELL(X,Y+1)=CELL(X,Y+1)+2:CELL(X+1,Y+1)=CELL(X+1,Y+1)+2 IF X=H THEN CELL(X,Y-1)=CELL(X,Y-1)+2:CELL(X,Y)=CELL(X,Y)+2:CELL(X,Y+1)=CELL(X,Y+1)+2 DEADCELL: NEXT Y NEXT X FOR X=2 TO H-1 IF (CELL(X,X-1) AND 1) <> 0 THEN CELL(X,X-1)=CELL(X,X-1)+2 NEXT X FOR X= 1 TO H CELL(0,X)=0:CELL(X-1,X+1)=0:CELL(X,0)=0 NEXT X GOTO MAINLOOP EXECUTE: MENUHIT=0 ON MENUCAT GOTO STARTMODE,STOPMODE,GENERATE,INITIALIZE,CHANGESIZE,LOADER,SAVER,QUIT STARTMODE: RUNMODE=1 MENU 1,1,1,"RUNNING":MENU 1,2,1,"STOP":MENU 1,3,1,"" GOTO GENERATE STOPMODE: RUNMODE=0 MENU 1,1,1,"START":MENU 1,2,1,"":MENU 1,3,1,"STEP" GOTO CHECKMENU QUIT: SYSTEM CHANGESIZE: CLS:PRINT"INPUT THE NEW LENGTH/WIDTH OF" PRINT"CELL ARRAY. USE ONLY EVEN NUMBERS." INPUT SIZE:SIZE=SIZE AND 254:IF SIZE > 176 GOTO CHANGESIZE GOTO NEWSIZE LOADER: LOCATE 22,1:INPUT"FILE NAME ";A$ OPEN"I",1,A$:INPUT#1,SIZE,GENERATION:H=SIZE/2:SIZE1=SIZE+1 FOR X=1 TO H FOR Y=X TO 1 STEP-1 INPUT#1,CELL(X,Y):IF CELL(X,Y)=1 THEN CELL(X,Y)=7 NEXT Y NEXT X LINE (0,0)-(178,178),0,BF:LOCATE 2,26:PRINT SIZE CLOSE:LOCATE 22,1:PRINT STRING$(40,32) RUNMODE=0:MENU 1,1,1,"START":MENU 1,2,1,"":MENU 1,3,1,"STEP" GOTO MAINLOOP SAVER: LOCATE 19,1:INPUT"FILE NAME ";A$ OPEN"O",1,A$:PRINT#1,SIZE,GENERATION FOR X=1 TO H FOR Y=X TO 1 STEP-1 PRINT#1,CELL(X,Y) NEXT Y NEXT X CLOSE:LOCATE 19,1:PRINT STRING$(40,32):GOTO GENERATE MENUINT: MENUHIT=MENU(0):MENUCAT=MENU(1):RETURN